﻿using PixivVideo.Utils.IoUtils;
using System;
using System.IO;

namespace PixivVideo.Currency.IoUtils
{
    internal class FileNameHelper
    {
        /// <summary>
        /// 创建一个不重复的文件名，用filetime生成，如 黑猫.jpg→黑猫1002252256.jpg
        /// </summary>
        /// <param name="FilePath"></param>
        /// <returns></returns>
        public string CreateRandomFileName(string FilePath)
        {
            return CreateFileNameAddTip(FilePath, DateTime.Now.ToFileTime().ToString());
        }

        /// <summary>
        /// 根据文件名返回临时文件夹中唯一命名的文件的完整路径
        ///   形如：公司文档(1).doc，公司文档(2).doc
        /// </summary>
        public string GetTempPathFileName(string fileName)
        {
            // 系统临时文件夹
            string tempPath = Path.GetTempPath();
            // 文件的完成路径
            fileName = tempPath + Path.GetFileName(fileName);
            // 文件名
            string fileNameWithoutExt =
                   Path.GetFileNameWithoutExtension(fileName);
            // 扩展名
            string fileExt = Path.GetExtension(fileName);
            int i = 0;
            while (File.Exists(fileName))
            {
                // 生成类似这样的文件名：公司文档(1).doc，公司文档(2).doc
                fileName = tempPath + fileNameWithoutExt +
                           string.Format("({0})", ++i) + fileExt;
            }
            return fileName;
        }

        /// <summary>
        /// 调用系统参数，生成唯一缓存文件。
        /// </summary>
        /// <returns></returns>
        public string CreateTempFileName()
        {
            return System.IO.Path.GetTempFileName();
        }

        /// <summary>
        /// 创建文件名，放置在子文件夹下。例如 c：//cat.jpg   tip=news  则返回 c://news//cat.jpg
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="Tip"></param>
        /// <returns></returns>
        public string CreateFileNameWithChlidFloder(string FilePath, string Tip)
        {
            string FlodePath = new FloderNameHelper().GetFloderPath(FilePath) + TextHelper.ReplaceBadChar(Tip) + "\\";
            new FloderHelper().FloderExits(FlodePath, true);
            string FileName = GetFileName(FilePath);
            return FlodePath + FileName;
        }

        /// <summary>
        /// 文件文件名增加后缀,如 黑猫.jpg→黑猫TIP.jpg
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="Tip"></param>
        /// <returns></returns>
        public string CreateFileNameAddTip(string FilePath, string Tip)
        {
            return new FloderNameHelper().GetFloderPath(FilePath) +
                GetFileNameWithoutExtension(FilePath) + TextHelper.ReplaceBadChar(Tip) + GetFileType(FilePath);
        }

        /// <summary>
        /// 创建一个和指定文件名相同，文件类型不同的文件名 如123.jpg→123.xml
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="FileExtension">新的文件类型，带.</param>
        /// <returns></returns>
        public string CreateFileNameWithExtension(string FilePath, String FileExtension)
        {
            return FilePath.Replace(GetFileType(FilePath), FileExtension);
        }

        /// <summary>
        ///  创建随机不重复文件名，需要文件类型，如（.jpg） 可以添加额外标识 tip
        /// </summary>
        /// <param name="FloderPath"></param>
        /// <param name="FileType"></param>
        /// <param name="Tip">额外文件名标识，默认为空</param>
        /// <returns></returns>
        public string CreateRandomFileName(string FloderPath, string FileType, string Tip = "")
        {
            if (!FileHelper.FileExits(FloderPath))
                new FloderHelper().FolderCreate(FloderPath);
            return FloderPath + Tip + DateTime.Now.ToFileTime() + FileType;
        }

        /// <summary>
        /// 获取文件名 不带路径
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="Pattern"></param>
        /// <returns></returns>
        public string GetFileName(String FilePath)
        {
            String FileName = "";

            try
            {
                FileName = TextHelper.ReplaceBadChar(Path.GetFileName(FilePath));
            }
            catch (Exception ex)
            {
                PrintLog.Log("获取文件名字失败！" + ex.Message);
            }
            return FileName;
        }

        /// <summary>
        /// 获取文件的扩展名 返回示例：.jpg
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="Pattern"></param>
        /// <returns></returns>
        public string GetFileType(String FilePath)
        {
            String FileName = "";
            try
            {
                FileName = Path.GetExtension(FilePath);
            }
            catch (Exception ex)
            {
                PrintLog.Log("获取文件类型失败！" + ex.Message);
            }
            return FileName;
        }

        /// <summary>
        /// 获取文件名 不带路径 不带文件后缀
        /// </summary>
        /// <param name="FilePath"></param>
        /// <param name="Pattern"></param>
        /// <returns></returns>
        public string GetFileNameWithoutExtension(String FilePath)
        {
            String FileName = "";

            try
            {
                FileName = Path.GetFileNameWithoutExtension(FilePath);
            }
            catch (Exception ex)
            {
                PrintLog.Log("获取无后缀文件名失败！");
                PrintLog.Log(ex);
            }
            return FileName;
        }
    }
}